package com.oak.broke.utils;

import cn.hutool.core.date.DatePattern;
import lombok.extern.slf4j.Slf4j;

import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

/**
 * @author tanghan
 * @Description 日期工具类
 * @date 2023/04/13/ 16:07:00
 */
@Slf4j
public class DateUtil {

    /**
     * 计算两个日期 相差天数
     *
     * @param startDate 开始时间
     * @param endDate   结束日期
     * @param addOne    日期间隔是否需要+1
     * @return
     */
    public static int daysBetween(Date startDate, Date endDate, Boolean addOne) {
        if (startDate == null || endDate == null) {
            log.warn("开始或结束日期为空，无法计算相差天数");
            return -1;
        }
        SimpleDateFormat sdf = new SimpleDateFormat(DatePattern.NORM_DATE_PATTERN);
        try {
            long start = sdf.parse(sdf.format(startDate)).getTime();
            long end = sdf.parse(sdf.format(endDate)).getTime();
            int days = (int) ((end - start) / (24 * 60 * 60 * 1000));
            if (addOne) {
                days += 1;
            }
            return days;
        } catch (Exception e) {
            log.error("日期转换异常，原因:", e);
            return -1;
        }
    }

    /**
     * 添加/减去多长时间
     *
     * @param start  开始时间
     * @param field  操作域 年/月/日....（详见Calendar中描述）
     * @param amount 操作时长
     * @return
     */
    public static Date add(Date start, int field, int amount) {
        Calendar calendar = Calendar.getInstance();
        if (start != null) {
            calendar.setTime(start);
        }
        calendar.add(field, amount);
        return calendar.getTime();
    }
}
